<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // var变量涉及到一个变量提升
    //在js中 代码进行编译执行的时候 会把变量和方法进行提升
    console.log(a);
    var a;
    //1. let 和const 同样和var一样都是用来声明变量或者常量的
    //let 和const  不存在变量提升

    // console.log(b);
    // let b;
    // console.log(c);
    // const c = 1;
    // 2.var 和 let都是用来声明变量 const 是一般用来声明常量 (基本数据类型)
    // var d = 1;
    // d = 2;
    // console.log(d);
    // let e = 1;
    // e = 2;
    // console.log(e);
    // const f = 1;
    // f = 2;
    // const user = {
    //     name: 'zhangsan',
    //     age: 19
    // }
    // user.age = 20;
    // console.log(user);
    // console.log(f);
    //3.let 和const 不能重复声明
    // var a1 = 1;
    // var a1 = 2;
    // console.log(a1);
    // let b1 = 1;
    // let b1 = 2;
    // const c1 = 1;
    // const c1 = 1;
    //4.作用域
    // var a = 2;
    // if (true) {
    //     var a = 1;
    // }
    // console.log(a);
    // let a2 = 1;
    // if (true) {
    //     let a2 = 2;
    //     console.log(a2);
    // }
    // console.log(a2);
    //总结:
    //1. var和let都是变量 非对象数据类型 const声明的常量
    //2. let和const不能重复声明
    //3. let和const块级作用域 var 没有作用域的
    //4. let 和const 同样和var一样都是用来声明变量或者常量的
    //5. 暂时性锁区

    // for (let i = 0; i < 5; i++) {
    //     console.log("第" + i + "循环");
    // }
    // console.log(i);
</script>

</html>